home *** CD-ROM | disk | FTP | other *** search
/ Express Pd: GALORE / Express Pd Galore - The Amiga PD & Shareware CD (1994)(Express Pd)[!][Amiga-CD32-CDTV].iso / productivity / term / timepanel.c < prev    next >
C/C++ Source or Header  |  1993-07-16  |  4KB  |  202 lines

  1. /*
  2. **    TimePanel.c
  3. **
  4. **    Editing panel for time values
  5. **
  6. **    Copyright © 1990-1993 by Olaf `Olsen' Barthel & MXM
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_TIME,GAD_USE,GAD_CANCEL };
  13.  
  14. STATIC LONG __saveds
  15. ShowTime(struct Gadget *SomeGadget,WORD Level)
  16. {
  17.     STATIC UBYTE Buffer[6];
  18.  
  19.     SPrintf(Buffer,"%2ld:%ld0",Level / 6,Level % 6);
  20.  
  21.     return((LONG)Buffer);
  22. }
  23.  
  24. STATIC struct Gadget *
  25. CreateAllGadgets(UBYTE Time,struct Gadget **GadgetArray,struct Gadget **GadgetList)
  26. {
  27.     struct Gadget        *Gadget;
  28.     struct NewGadget     NewGadget;
  29.     UWORD             Counter = 0;
  30.  
  31.     SZ_SizeSetup(Window -> WScreen,&UserFont,TRUE);
  32.  
  33.     memset(&NewGadget,0,sizeof(struct NewGadget));
  34.  
  35.     if(Gadget = CreateContext(GadgetList))
  36.     {
  37.         WORD Left = SZ_LeftOffsetN(MSG_TIMEPANEL_TIME_GAD,-1),Width;
  38.  
  39.         SZ_ResetMaxWidth();
  40.  
  41.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_USE_GAD),0,NULL);
  42.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_CANCEL_GAD),0,NULL);
  43.  
  44.         Width = SZ_ResetMaxWidth();
  45.  
  46.         SZ_SetWidth(Width);
  47.  
  48.         if(Width > Left)
  49.             SZ_AddLeftOffset(Width);
  50.         else
  51.             SZ_AddLeftOffset(Left);
  52.  
  53.         NewGadget . ng_GadgetText    = LocaleString(MSG_TIMEPANEL_TIME_GAD);
  54.         NewGadget . ng_GadgetID        = Counter;
  55.  
  56.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  57.             SZ_Adjust,        TRUE,
  58.             SZ_AutoWidth,        TRUE,
  59.  
  60.             GTSL_Min,        DT_GET_TIME( 0, 0),
  61.             GTSL_Max,        DT_GET_TIME(23,50),
  62.             GTSL_Level,        Time,
  63.             GTSL_DispFunc,        ShowTime,
  64.             GTSL_LevelFormat,    "%s",
  65.             GTSL_MaxLevelLen,    5,
  66.         TAG_DONE);
  67.  
  68.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_USE_GAD);
  69.         NewGadget . ng_GadgetID        = Counter;
  70.         NewGadget . ng_Flags        = 0;
  71.  
  72.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  73.             SZ_Adjust,    TRUE,
  74.             SZ_AutoWidth,    TRUE,
  75.             SZ_AlignExtra,    TRUE,
  76.             SZ_AlignLeft,    TRUE,
  77.             SZ_AlignBottom,    TRUE,
  78.         TAG_DONE);
  79.  
  80.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_CANCEL_GAD);
  81.         NewGadget . ng_GadgetID        = Counter;
  82.  
  83.         GadgetArray[Counter] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  84.             SZ_Adjust,    TRUE,
  85.             SZ_AutoWidth,    TRUE,
  86.             SZ_AlignRight,    TRUE,
  87.         TAG_DONE);
  88.     }
  89.  
  90.     return(Gadget);
  91. }
  92.  
  93. BYTE
  94. TimePanel(STRPTR StartTime)
  95. {
  96.     struct Window    *PanelWindow;
  97.     struct Gadget    *GadgetList = NULL;
  98.     struct Gadget    *GadgetArray[GAD_CANCEL + 1];
  99.     UBYTE         Time = *StartTime;
  100.     BYTE         Result = FALSE;
  101.  
  102.     if(CreateAllGadgets(Time,GadgetArray,&GadgetList))
  103.     {
  104.         if(PanelWindow = OpenWindowTags(NULL,
  105.             WA_Left,    GetScreenLeft(Window) + (GetScreenWidth(Window) - SZ_GetWindowWidth()) / 2,
  106.             WA_Top,        GetScreenTop(Window) + (GetScreenHeight(Window) - SZ_GetWindowHeight())    / 2,
  107.             WA_Width,    SZ_GetWindowWidth(),
  108.             WA_Height,    SZ_GetWindowHeight(),
  109.  
  110.             WA_Activate,    TRUE,
  111.             WA_DragBar,    TRUE,
  112.             WA_DepthGadget,    TRUE,
  113.             WA_RMBTrap,    TRUE,
  114.             WA_DepthGadget,    TRUE,
  115.             WA_CloseGadget,    TRUE,
  116.             WA_CustomScreen,Window -> WScreen,
  117.  
  118.             WA_IDCMP,    IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | IDCMP_RAWKEY | BUTTONIDCMP | SLIDERIDCMP,
  119.  
  120.             WA_Title,    LocaleString(MSG_TIMEPANEL_SET_TIME_TXT),
  121.         TAG_DONE))
  122.         {
  123.             struct IntuiMessage    *Massage;
  124.             ULONG             IClass,Code;
  125.             struct Gadget        *Gadget;
  126.             BYTE             Terminated = FALSE;
  127.  
  128.             GuideContext(CONTEXT_TIME);
  129.  
  130.             PushWindow(PanelWindow);
  131.  
  132.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  133.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  134.             GT_RefreshWindow(PanelWindow,NULL);
  135.  
  136.             ActiveGadget = NULL;
  137.  
  138.             ClrSignal(SIG_BREAK);
  139.  
  140.             while(!Terminated)
  141.             {
  142.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  143.                     break;
  144.  
  145.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  146.                 {
  147.                     IClass    = Massage -> Class;
  148.                     Code    = Massage -> Code;
  149.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  150.  
  151.                     GT_ReplyIMsg(Massage);
  152.  
  153.                     KeySelect(GadgetArray,GAD_CANCEL,Code,PanelWindow,&Gadget,&IClass,&Code);
  154.  
  155.                     if(IClass == IDCMP_CLOSEWINDOW)
  156.                         Terminated = TRUE;
  157.  
  158.                     if(IClass == IDCMP_MOUSEMOVE)
  159.                         Time = Code;
  160.  
  161.                     if(IClass == IDCMP_GADGETUP)
  162.                     {
  163.                         switch(Gadget -> GadgetID)
  164.                         {
  165.                             case GAD_TIME:
  166.  
  167.                                 Time = Code;
  168.                                 break;
  169.  
  170.                             case GAD_USE:
  171.  
  172.                                 Terminated = TRUE;
  173.  
  174.                                 Result = TRUE;
  175.  
  176.                                 *StartTime = Time;
  177.  
  178.                                 break;
  179.  
  180.                             case GAD_CANCEL:
  181.  
  182.                                 Terminated = TRUE;
  183.  
  184.                                 break;
  185.                         }
  186.                     }
  187.                 }
  188.             }
  189.  
  190.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  191.  
  192.             PopWindow();
  193.  
  194.             CloseWindow(PanelWindow);
  195.         }
  196.     }
  197.  
  198.     FreeGadgets(GadgetList);
  199.  
  200.     return(Result);
  201. }
  202.